// 1.引入axios
import axios from 'axios'
import qs from 'qs'
import router from '../router/index'
import store from '../store'
// 2,做环境切换
let baseURL = '';
if (process.env.NODE_ENV === 'development') {
    baseURL = '/api';//开发环境下
} else if (process.env.NODE_ENV === 'production') {
    baseURL = '';//生产环境
}

// 3.自定义axios
const instance = axios.create({
    baseURL: baseURL,
    timeout: 1000,
})

// 4.请求拦截器
instance.interceptors.request.use(config => {
    // console.group('本次请求的地址为:' + config.url)
    if (config.url !== "/api/login") {
        // 做令牌验证 
        if (sessionStorage.getItem("user")) {
            let user = JSON.parse(sessionStorage.getItem("user")
            )
            // 设置请求头
            config.headers.authorization = user.token;
        }

    }

    return config
}, err => {
    return Promise.reject(err)
})

// 5.响应拦截器
instance.interceptors.response.use(res => {
    // console.group('本次响应的地址为:' + res.config.url)
    // console.log(sessionStorage.getItem("user"));
    if (res.data.code === 403) {
        // 统一验证 
        // 消息提示
        alert("登录过期")
        router.push("/login");
        store.dispatch("userActions", null)
    }


    // 统一验证
    return res
}, err => {
    return Promise.reject(err)
})


// 封装get并导出
/**
 * 参数一:url地址
 * 参数二:[请求的数据]
*/
export function get(url, params = null) {

    /**
     * 1,实例化Promise时传递一个参数: function
     * 2.在function中接受两个参数
     * 3.参数一: resolve[类型为function]
     * 4.参数二: reject[类型为function]
    */
    return new Promise((resolve, reject) => {
        instance.get(url, { params }).then(res => {
            resolve(res.data)
        }).catch(err => {
            reject(err.data)
        })
    })
}

// 封装post并导出
export function post(url, params, isFile = false) {
    // 处理headers头
    let config = {
        headers: {
            "Content-Type": "application/x-www-form-urlencoded"
        }
    }
    // 对表单数据进行序列化操作
    let data = qs.stringify(params)

    if (isFile) {
        config = {
            headers: {
                "Content-Type": "multipart/form-data"
            }
        }
        data = new FormData()
        for (let i in params) {
            data.append(i, params[i])
        }
    }
    /**
     * 1,实例化Promise时传递一个参数: function
     * 2.在function中接受两个参数
     * 3.参数一: resolve[类型为function]
     * 4.参数二: reject[类型为function]
    */
    return new Promise((resolve, reject) => {
        instance.post(url, data, config).then(res => {
            resolve(res.data)
        }).catch(err => {
            reject(err.data)
        })
    })

}